#include <iostream>
#include <memory>

// 代理模式指代理控制对其他对象的访问， 也就是代理对象控制对原对象的引⽤。在某些情况下，⼀个
// 对象不适合或者不能直接被引⽤访问，⽽代理对象可以在客⼾端和⽬标对象之间起到中介的作⽤

class RentHouse
{
public:
    virtual void rentHouse() = 0;
};

/*房东类：将房⼦租出去*/
class LandLord : public RentHouse
{
public:
    virtual void rentHouse()
    {
        std::cout << "将房子租出去" << std::endl;
    }
};

/*中介代理类：对租房⼦进⾏功能加强，实现租房以外的其他功能*/
class Intermediary : public RentHouse
{
public:
    void rentHouse()
    {
        std::cout << "发布招租启示\n";
        std::cout << "带人看房\n";
        _landlord.rentHouse();
        std::cout << "负责租后维修\n";
    }

private:
    LandLord _landlord;
};
int main()
{
    Intermediary intermediary;
    intermediary.rentHouse();
    return 0;
}